;; Copyright London Stock Exchange Group 2016 All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
;; You may obtain a copy of the License at
;;
;;                  http://www.apache.org/licenses/LICENSE-2.0
;;
;; Unless required by applicable law or agreed to in writing, software
;; distributed under the License is distributed on an "AS IS" BASIS,
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;; See the License for the specific language governing permissions and
;; limitations under the License.

(ns chaintool.platforms.core
  (:require [chaintool.platforms.golang.system :as syscc]
            [chaintool.platforms.golang.userspace :as golang]
            [chaintool.util :as util])
  (:refer-clojure :exclude [find]))

(def factories
  {"org.hyperledger.chaincode.golang" golang/factory
   "org.hyperledger.chaincode.system" syscc/factory})

(defn find [config]
  (let [platform (:Platform config)
        name (:Name platform)
        version (:Version platform)]
    (if-let [factory (factories name)]
      (factory version)
      (util/abort -1 (str "Unknown platform type: \"" name "\"")))))
